package com.feng.study.demo.juc;

import java.util.concurrent.locks.ReentrantLock;

/**
 * ReentrantLock：独占锁（即其他线程只有在占有锁的线程释放后才能竞争锁，有且只有一个线程能竞争成功）
 *                与之对应的是共享锁 （即共享资源可以被多个线程同时占有，直到共享资源被占用完毕，常见的有读写锁 ReadWriteLock, CountdownLatch）
 * 可重入锁：？
 *
 * 独占锁又分为：公平锁与非公平锁
 * ReentrantLock创建的锁是非公平锁，非公平锁在获取锁时，会直接判断当前线程是否是队列的第一个线程，如果是，则直接获取锁，否则，则加入到队列中，
 * 当然也可以在new ReentrantLock()时传入参数，设置为公平锁
 */
public class ReentrantLockDemo {
    public static void main(String[] args) {
        reentrantLockTest();
    }

    private static void reentrantLockTest() {
        // 默认非公平锁
        ReentrantLock reentrantLock = new ReentrantLock();
        // 公平锁
        ReentrantLock fair = new ReentrantLock(true);
        reentrantLock.lock();
        try{

        }finally {
            reentrantLock.unlock();
        }
    }
}
